/*
 *
 *    Copyright (c) 2022 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

// THIS FILE IS GENERATED BY ZAP
// This file is generated from clusters-Enums.h.zapt

#pragma once

#include <clusters/shared/Enums.h>
#include <cstdint>

namespace chip
{
namespace app
{
	namespace Clusters
	{
		namespace DeviceEnergyManagement
		{

			// Enum for AdjustmentCauseEnum
			enum class AdjustmentCauseEnum : uint8_t {
				kLocalOptimization = 0x00,
				kGridOptimization = 0x01,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 2,
			};

			// Enum for CauseEnum
			enum class CauseEnum : uint8_t {
				kNormalCompletion = 0x00,
				kOffline = 0x01,
				kFault = 0x02,
				kUserOptOut = 0x03,
				kCancelled = 0x04,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 5,
			};

			// Enum for CostTypeEnum
			enum class CostTypeEnum : uint8_t {
				kFinancial = 0x00,
				kGHGEmissions = 0x01,
				kComfort = 0x02,
				kTemperature = 0x03,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 4,
			};

			// Enum for ESAStateEnum
			enum class ESAStateEnum : uint8_t {
				kOffline = 0x00,
				kOnline = 0x01,
				kFault = 0x02,
				kPowerAdjustActive = 0x03,
				kPaused = 0x04,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 5,
			};

			// Enum for ESATypeEnum
			enum class ESATypeEnum : uint8_t {
				kEvse = 0x00,
				kSpaceHeating = 0x01,
				kWaterHeating = 0x02,
				kSpaceCooling = 0x03,
				kSpaceHeatingCooling = 0x04,
				kBatteryStorage = 0x05,
				kSolarPV = 0x06,
				kFridgeFreezer = 0x07,
				kWashingMachine = 0x08,
				kDishwasher = 0x09,
				kCooking = 0x0A,
				kHomeWaterPump = 0x0B,
				kIrrigationWaterPump = 0x0C,
				kPoolPump = 0x0D,
				kOther = 0xFF,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 14,
			};

			// Enum for ForecastUpdateReasonEnum
			enum class ForecastUpdateReasonEnum : uint8_t {
				kInternalOptimization = 0x00,
				kLocalOptimization = 0x01,
				kGridOptimization = 0x02,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 3,
			};

			// Enum for OptOutStateEnum
			enum class OptOutStateEnum : uint8_t {
				kNoOptOut = 0x00,
				kLocalOptOut = 0x01,
				kGridOptOut = 0x02,
				kOptOut = 0x03,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 4,
			};

			// Enum for PowerAdjustReasonEnum
			enum class PowerAdjustReasonEnum : uint8_t {
				kNoAdjustment = 0x00,
				kLocalOptimizationAdjustment = 0x01,
				kGridOptimizationAdjustment = 0x02,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 3,
			};

			// Bitmap for Feature
			enum class Feature : uint32_t {
				kPowerAdjustment = 0x1,
				kPowerForecastReporting = 0x2,
				kStateForecastReporting = 0x4,
				kStartTimeAdjustment = 0x8,
				kPausable = 0x10,
				kForecastAdjustment = 0x20,
				kConstraintBasedAdjustment = 0x40,
			};
		} // namespace DeviceEnergyManagement
	} // namespace Clusters
} // namespace app
} // namespace chip
